package cn.iocoder.yudao.module.design.dal.mysql.userflowrel;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.design.controller.admin.userflowrel.vo.UserFlowRelBaseVO;
import cn.iocoder.yudao.module.design.controller.admin.userflowrel.vo.UserFlowRelExportReqVO;
import cn.iocoder.yudao.module.design.controller.admin.userflowrel.vo.UserFlowRelPageReqVO;
import cn.iocoder.yudao.module.design.dal.dataobject.userflowrel.UserFlowRelDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 用户和流程角色关联 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface UserFlowRelMapper extends BaseMapperX<UserFlowRelDO> {

    default PageResult<UserFlowRelDO> selectPage(UserFlowRelPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<UserFlowRelDO>()
                .eqIfPresent(UserFlowRelDO::getUserId, reqVO.getUserId())
                .eqIfPresent(UserFlowRelDO::getHouseId, reqVO.getHouseId())
                .eqIfPresent(UserFlowRelDO::getFlowId, reqVO.getFlowId())
                .eqIfPresent(UserFlowRelDO::getRoleId, reqVO.getRoleId())
                .eqIfPresent(UserFlowRelDO::getStatus, reqVO.getStatus())
                .betweenIfPresent(UserFlowRelDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(UserFlowRelDO::getId));
    }

    default List<UserFlowRelDO> selectList(UserFlowRelExportReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<UserFlowRelDO>()
                .eqIfPresent(UserFlowRelDO::getUserId, reqVO.getUserId())
                .eqIfPresent(UserFlowRelDO::getHouseId, reqVO.getHouseId())
                .eqIfPresent(UserFlowRelDO::getFlowId, reqVO.getFlowId())
                .eqIfPresent(UserFlowRelDO::getRoleId, reqVO.getRoleId())
                .eqIfPresent(UserFlowRelDO::getStatus, reqVO.getStatus())
                .betweenIfPresent(UserFlowRelDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(UserFlowRelDO::getId));
    }
    Map selectUserRelInfoByRoleId(@Param("flowId") Long flowId ,@Param("roleId") Long roleId);

    default List<UserFlowRelDO> selectList(UserFlowRelBaseVO reqVO) {
        return selectList(new LambdaQueryWrapperX<UserFlowRelDO>()
                .eqIfPresent(UserFlowRelDO::getUserId, reqVO.getUserId())
                .eqIfPresent(UserFlowRelDO::getHouseId, reqVO.getHouseId())
                .eqIfPresent(UserFlowRelDO::getFlowId, reqVO.getFlowId())
                .eqIfPresent(UserFlowRelDO::getRoleId, reqVO.getRoleId())
                .eqIfPresent(UserFlowRelDO::getStatus, reqVO.getStatus())
                .orderByDesc(UserFlowRelDO::getId));
    }
}
